using UnityEngine;
using UnityEngine.Tilemaps;

/// <summary>
/// 路径高亮系统自动设置工具 - 帮助快速配置测试环境
/// </summary>
public class PathHighlightSetup : MonoBehaviour
{
    [Header("自动设置选项")]
    public bool autoSetupOnStart = true; // 是否在开始时自动设置
    public bool createHighlightLayer = true; // 是否创建高亮层
    public bool createTestTiles = true; // 是否创建测试瓦片
    public bool createTestItems = true; // 是否创建测试物品
    
    [Header("测试设置")]
    public GameObject testItemPrefab; // 测试物品预制体
    public Transform itemSpawnPoint; // 物品生成点
    
    private void Start()
    {
        if (autoSetupOnStart)
        {
            SetupPathHighlightSystem();
        }
    }
    
    /// <summary>
    /// 设置路径高亮系统
    /// </summary>
    [ContextMenu("设置路径高亮系统")]
    public void SetupPathHighlightSystem()
    {
        Debug.Log("开始设置路径高亮系统...");
        
        // 1. 创建高亮层
        if (createHighlightLayer)
        {
            CreateHighlightLayer();
        }
        
        // 2. 创建测试瓦片
        if (createTestTiles)
        {
            CreateTestTiles();
        }
        
        // 3. 设置组件
        SetupComponents();
        
        // 4. 创建测试物品
        if (createTestItems)
        {
            CreateTestItems();
        }
        
        Debug.Log("路径高亮系统设置完成！");
    }
    
    /// <summary>
    /// 创建高亮层
    /// </summary>
    private void CreateHighlightLayer()
    {
        // 查找Grid
        Grid grid = FindObjectOfType<Grid>();
        if (grid == null)
        {
            Debug.LogError("未找到Grid组件，请确保场景中有Grid对象");
            return;
        }
        
        // 检查是否已存在高亮层
        Tilemap existingHighlight = grid.GetComponentInChildren<Tilemap>();
        if (existingHighlight != null && existingHighlight.CompareTag("Highlight"))
        {
            Debug.Log("高亮层已存在，跳过创建");
            return;
        }
        
        // 创建高亮层GameObject
        GameObject highlightLayer = new GameObject("Highlight");
        highlightLayer.transform.SetParent(grid.transform);
        highlightLayer.tag = "Highlight";
        
        // 添加Tilemap组件
        Tilemap tilemap = highlightLayer.AddComponent<Tilemap>();
        TilemapRenderer renderer = highlightLayer.AddComponent<TilemapRenderer>();
        
        // 设置渲染顺序（确保在高亮层显示在最上层）
        renderer.sortingOrder = 10;
        
        Debug.Log("高亮层创建完成");
    }
    
    /// <summary>
    /// 创建测试瓦片
    /// </summary>
    private void CreateTestTiles()
    {
        // 这里可以创建简单的测试瓦片
        // 在实际项目中，应该使用真实的瓦片资源
        Debug.Log("测试瓦片创建完成（请手动分配瓦片资源）");
    }
    
    /// <summary>
    /// 设置组件
    /// </summary>
    private void SetupComponents()
    {
        // 检查并添加PathHighlightManager
        PathHighlightManager highlightManager = FindObjectOfType<PathHighlightManager>();
        if (highlightManager == null)
        {
            GameObject managerObj = new GameObject("PathHighlightManager");
            highlightManager = managerObj.AddComponent<PathHighlightManager>();
            Debug.Log("PathHighlightManager组件已添加");
        }
        
        // 检查并添加ItemDragManager
        ItemDragManager dragManager = FindObjectOfType<ItemDragManager>();
        if (dragManager == null)
        {
            GameObject dragManagerObj = new GameObject("ItemDragManager");
            dragManager = dragManagerObj.AddComponent<ItemDragManager>();
            Debug.Log("ItemDragManager组件已添加");
        }
        
        // 自动分配高亮层
        if (highlightManager.highlightTilemap == null)
        {
            Tilemap highlightTilemap = GameObject.FindWithTag("Highlight")?.GetComponent<Tilemap>();
            if (highlightTilemap != null)
            {
                highlightManager.highlightTilemap = highlightTilemap;
                Debug.Log("高亮层已自动分配");
            }
        }
    }
    
    /// <summary>
    /// 创建测试物品
    /// </summary>
    private void CreateTestItems()
    {
        if (testItemPrefab == null)
        {
            // 创建默认测试物品
            CreateDefaultTestItems();
        }
        else
        {
            // 使用预制体创建测试物品
            CreatePrefabTestItems();
        }
    }
    
    /// <summary>
    /// 创建默认测试物品
    /// </summary>
    private void CreateDefaultTestItems()
    {
        Vector3 spawnPosition = itemSpawnPoint != null ? itemSpawnPoint.position : Vector3.zero;
        
        for (int i = 0; i < 3; i++)
        {
            // 创建立方体作为测试物品
            GameObject testItem = GameObject.CreatePrimitive(PrimitiveType.Cube);
            testItem.name = $"TestItem_{i + 1}";
            testItem.transform.position = spawnPosition + Vector3.right * i * 2f;
            testItem.transform.localScale = Vector3.one * 0.8f;
            
            // 添加拖拽组件
            if (testItem.GetComponent<DraggableItem>() == null)
            {
                testItem.AddComponent<DraggableItem>();
            }
            
            // 添加碰撞器（如果不存在）
            if (testItem.GetComponent<Collider2D>() == null)
            {
                testItem.AddComponent<BoxCollider2D>();
            }
            
            // 设置颜色
            Renderer renderer = testItem.GetComponent<Renderer>();
            if (renderer != null)
            {
                Color[] colors = { Color.red, Color.green, Color.blue };
                renderer.material.color = colors[i % colors.Length];
            }
        }
        
        Debug.Log("默认测试物品创建完成");
    }
    
    /// <summary>
    /// 使用预制体创建测试物品
    /// </summary>
    private void CreatePrefabTestItems()
    {
        Vector3 spawnPosition = itemSpawnPoint != null ? itemSpawnPoint.position : Vector3.zero;
        
        for (int i = 0; i < 3; i++)
        {
            Vector3 position = spawnPosition + Vector3.right * i * 2f;
            GameObject testItem = Instantiate(testItemPrefab, position, Quaternion.identity);
            testItem.name = $"TestItem_{i + 1}";
            
            // 确保有拖拽组件
            if (testItem.GetComponent<DraggableItem>() == null)
            {
                testItem.AddComponent<DraggableItem>();
            }
        }
        
        Debug.Log("预制体测试物品创建完成");
    }
    
    /// <summary>
    /// 创建拖拽预览预制体
    /// </summary>
    [ContextMenu("创建拖拽预览预制体")]
    public void CreateDragPreviewPrefab()
    {
        // 创建预览对象
        GameObject previewObj = new GameObject("DragPreview");
        
        // 添加UI组件
        Canvas canvas = FindObjectOfType<Canvas>();
        if (canvas != null)
        {
            previewObj.transform.SetParent(canvas.transform, false);
            
            // 添加Image组件
            UnityEngine.UI.Image image = previewObj.AddComponent<UnityEngine.UI.Image>();
            image.color = new Color(1, 1, 1, 0.7f);
            
            // 添加DragPreviewController
            DragPreviewController controller = previewObj.AddComponent<DragPreviewController>();
            controller.previewImage = image;
            
            Debug.Log("拖拽预览预制体创建完成，请保存为预制体并分配给ItemDragManager");
        }
        else
        {
            Debug.LogWarning("未找到Canvas，无法创建UI预览对象");
        }
    }
    
    /// <summary>
    /// 清理测试环境
    /// </summary>
    [ContextMenu("清理测试环境")]
    public void CleanupTestEnvironment()
    {
        // 删除测试物品
        GameObject[] testItems = GameObject.FindGameObjectsWithTag("TestItem");
        foreach (var item in testItems)
        {
            DestroyImmediate(item);
        }
        
        // 删除测试物品（按名称查找）
        GameObject[] itemsByName = GameObject.FindGameObjectsWithTag("Untagged");
        foreach (var item in itemsByName)
        {
            if (item.name.StartsWith("TestItem_"))
            {
                DestroyImmediate(item);
            }
        }
        
        Debug.Log("测试环境清理完成");
    }
    
    /// <summary>
    /// 验证系统设置
    /// </summary>
    [ContextMenu("验证系统设置")]
    public void ValidateSystemSetup()
    {
        bool isValid = true;
        
        // 检查高亮管理器
        PathHighlightManager highlightManager = FindObjectOfType<PathHighlightManager>();
        if (highlightManager == null)
        {
            Debug.LogError("未找到PathHighlightManager");
            isValid = false;
        }
        else if (highlightManager.highlightTilemap == null)
        {
            Debug.LogWarning("PathHighlightManager未分配高亮层");
        }
        
        // 检查拖拽管理器
        ItemDragManager dragManager = FindObjectOfType<ItemDragManager>();
        if (dragManager == null)
        {
            Debug.LogError("未找到ItemDragManager");
            isValid = false;
        }
        
        // 检查高亮层
        Tilemap highlightTilemap = GameObject.FindWithTag("Highlight")?.GetComponent<Tilemap>();
        if (highlightTilemap == null)
        {
            Debug.LogError("未找到高亮层Tilemap");
            isValid = false;
        }
        
        // 检查路径生成器
        TilemapPathGenerator pathGenerator = FindObjectOfType<TilemapPathGenerator>();
        if (pathGenerator == null)
        {
            Debug.LogWarning("未找到TilemapPathGenerator");
        }
        
        if (isValid)
        {
            Debug.Log("系统设置验证通过！");
        }
        else
        {
            Debug.LogError("系统设置验证失败，请检查上述错误");
        }
    }
} 